package br.com.pucrs.tcc.controller;

import java.io.IOException;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import br.com.pucrs.tcc.ed.Usuario;
import br.com.pucrs.tcc.enumerator.TipoUsuarioEnum;
import br.com.pucrs.tcc.exception.UsuarioException;
import br.com.pucrs.tcc.login.SessionType;
import br.com.pucrs.tcc.util.jsf.MensagemUtil;
import br.com.pucrs.tcc.util.jsf.SessionUtil;
import br.com.pucrs.tcc.vo.UsuarioTrocaSenha;
//import javax.faces.application.FacesMessage;
//import org.primefaces.event.FileUploadEvent;

@ManagedBean(name = "HomeBean")
@RequestScoped
public class HomeBean {

	private Usuario usuario;
	@EJB
	private br.com.pucrs.tcc.rn.UsuarioRN usuarioRN;

	private String menu;
	
	private String tipoUsuario;
	
	private UsuarioTrocaSenha usuarioTrocaSenha;
	
	public String getTipoUsuario(){
		return tipoUsuario;
	}

	public HomeBean() {
		usuarioTrocaSenha = new UsuarioTrocaSenha();
		
		FacesContext fContext = FacesContext.getCurrentInstance();
		HttpServletRequest request = (HttpServletRequest) fContext
				.getExternalContext().getRequest();
		HttpSession httpSession = request.getSession(false);

		SessionType session = null;

		if (httpSession.getAttribute("user-session") != null) {
			session = (SessionType) httpSession.getAttribute("user-session");
		}

		if (session != null) {
			usuario = new Usuario();
			usuario.setMatricula(session.getMatricula());
			usuario.setNome(session.getNomeUsuario());
			tipoUsuario = session.getTipoUsuario().getDescricao();
			
			if (session.getTipoUsuario().equals(TipoUsuarioEnum.ADMINISTRADOR)) {
				menu = "/pages/templates/menu/menu_admin.xhtml";
			} else if (session.getTipoUsuario().equals(
					TipoUsuarioEnum.COORDENADOR)) {
				menu = "/pages/templates/menu/menu_coordenador.xhtml";
			} else if (session.getTipoUsuario().equals(
					TipoUsuarioEnum.FUNCIONARIO)) {
				menu = "/pages/templates/menu/menu_funcionario.xhtml";
			} else if (session.getTipoUsuario().equals(
					TipoUsuarioEnum.PROFESSOR)) {
				menu = "/pages/templates/menu/menu_professor.xhtml";
			} else {
				menu = "/pages/templates/menu/menu_aluno.xhtml";
			}
		}
	}

	public Usuario getUsuario() {
		return this.usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public String getMenu() {
		return menu;
	}
	
	public UsuarioTrocaSenha getUsuarioTrocaSenha() {
		return usuarioTrocaSenha;
	}

	public void setUsuarioTrocaSenha(UsuarioTrocaSenha usuarioTrocaSenha) {
		this.usuarioTrocaSenha = usuarioTrocaSenha;
	}

	public void logout() {
		FacesContext fContext = FacesContext.getCurrentInstance();
		HttpServletRequest request = (HttpServletRequest) fContext
				.getExternalContext().getRequest();
		HttpSession httpSession = request.getSession(false);

		if (httpSession.getAttribute("user-session") != null) {
			httpSession.removeAttribute("user-session");
		}
		
		try {
			fContext.getExternalContext().redirect(request.getContextPath()
					+ "/pages/home.xhtml");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public void trocarSenha() {
		try
		{

			this.usuarioTrocaSenha.setMatricula(SessionUtil.getMatriculaUsuarioLogado());
			
			if (usuarioRN.trocarSenha(usuarioTrocaSenha)) {
				MensagemUtil.mostraMensagemSucesso("Senha alterada com sucesso");
			}
			else {
				MensagemUtil.mostraMensagemErro("Problema ao alterar a senha. Tente mais tarde.");
			}
			
		}
		catch(UsuarioException e) {
			MensagemUtil.mostraMensagemErro(e.getMessage());
		}
		catch(Exception e) {
			MensagemUtil.mostraMensagemErro(e.getMessage());
			e.printStackTrace();
		}
		
	}

}
